<?php

/**
 * \file
 * Classe `url`.
 */

namespace pilar\Entities /* \cond */ ; /* \endcond */
{

/**
 * Membre URL.
 *
 * \since 17/11/2008
 * \author Matthieu OVIEDO <matthieu.oviedo@gmail.com>
 */
class Url extends String {

protected function loadDefaultParams() {
 parent::loadDefaultParams();

 $this->params->set(array(
  'name' => 'url',
  'caption' => 'URL'
 ));
}


/**
 * Vérifie que la valeur assignée au membre soit bien une URL
 * valide syntaxiquement.
 *
 * Source : http://fr.php.net/manual/en/function.eregi.php#82945
 *
 * \toto Voir si on peut pas se contenter d'une expression plus simple.
 *
 * \todo Voir pourquoi ça ne marche pas sous PHP 6. 
 *
 * \since 17/11/2008
 * \return \c TRUE si \a $value est une URL valide, \c FALSE sinon.
 */
public function acceptsFieldValue($fieldName, $value) {
 $domain = '(http(s?):\/\/|ftp:\/\/)*([[:alpha:]][-[:alnum:]]*[[:alnum:]])(\.[[:alpha:]][-[:alnum:]]*[[:alpha:]])+';
 $dir = '(\/[[:alpha:]][-[:alnum:]]*[[:alnum:]])*';
 $trailingslash  = '(\/?)';
 $page = '(\/[[:alpha:]][-[:alnum:]]*\.[[:alpha:]]{3,5})?';
 $getstring = '(\?([[:alnum:]][-_%[:alnum:]]*=[-_%[:alnum:]]+)(&([[:alnum:]][-_%[:alnum:]]*=[-_%[:alnum:]]+))*)?';
 if(preg_match('/^'.$domain.$dir.$trailingslash.$page.$getstring.'$/i', $value)) return true;
 if(preg_match('/^'.$dir.$trailingslash.$page.$getstring.'$/i', $value)) return true;
 return false;
}

} // Class.

} // Namespace.

?>
